// #include <stdio.h>
// #include <stdlib.h>
// #include <windows.h>
// #include <assert.h>
//
// typedef struct SqList {
//     int* data;
//     int length;
//     int maxsize;
// }SqList;
//
// void InitSQ(SqList* L) {
//     L->data=NULL;
//     L->length=L->maxsize=0;
// }
//
// void Full(SqList* L) {
//     if(L->length==L->maxsize) {
//         int NewLength=L->length==0?4:2*L->maxsize;
//         int* tmp=(int*)realloc(L->data,sizeof(int)*NewLength);
//         if(tmp==NULL) {
//             exit(1);
//         }
//         L->data=tmp;
//         L->maxsize=NewLength;
//     }
// }
//
// void InsertBack(SqList* L, int elem) {
//     if (L == NULL) return;
//     Full(L);
//     L->data[L->length] = elem;
//     L->length++;
// }
//
// void Print(SqList* L) {
//     for(int i=0;i<L->length;i++) {
//         printf("%d ",L->data[i]);
//     }
//     printf("\n");
// }
//
// void Destroy(SqList* L) {
//     if(L == NULL) return;
//     free(L->data);
//     L->data = NULL;
//     L->length = L->maxsize = 0;
// }
//
// int compare(const void* a, const void* b) {
//     return (*(int*)a - *(int*)b);
// }
//
// void DeleteRepeatElem1(SqList* L) {
//     assert(L);
//     assert(L->data);
//     if(L->length==0) {
//         return;
//     }
//
//     // 先排序
//     qsort(L->data, L->length, sizeof(int), compare);
//
//     int i,j;
//     for(i=0,j=1;j<L->length;j++) {
//         if(L->data[i]!=L->data[j]) {
//             L->data[++i]=L->data[j];
//         }
//     }
//     L->length=i+1;
// }
//
// void DeleteRepeatElem2(SqList* L) {
//     if (L == NULL || L->data == NULL || L->length <= 1) {
//         return; // 处理空表或单元素表
//     }
//
//     // 先排序
//     qsort(L->data, L->length, sizeof(int), compare);
//
//     int slow = 0; // 慢指针：指向当前唯一元素的末尾
//     for (int fast = 1; fast < L->length; fast++) { // 快指针：遍历所有元素
//         if (L->data[slow] != L->data[fast]) {
//             slow++; // 移动慢指针
//             L->data[slow] = L->data[fast]; // 保存新唯一元素
//         }
//     }
//     L->length = slow + 1; // 更新长度
// }
//
// int main() {
//     SetConsoleOutputCP(CP_UTF8);
//     SqList L;
//     InitSQ(&L);
//
//     InsertBack(&L,5);
//     InsertBack(&L,1);
//     InsertBack(&L,2);
//     InsertBack(&L,2);
//     InsertBack(&L,4);
//     InsertBack(&L,5);
//     InsertBack(&L,3);
//     InsertBack(&L,1);
//
//     printf("\n第一种↓\n");
//
//     printf("原式:");Print(&L);
//     DeleteRepeatElem1(&L);
//     printf("之后:");Print(&L);
//
//     SqList L2;
//     InitSQ(&L2);
//
//     InsertBack(&L2,5);
//     InsertBack(&L2,1);
//     InsertBack(&L2,2);
//     InsertBack(&L2,2);
//     InsertBack(&L2,4);
//     InsertBack(&L2,5);
//     InsertBack(&L2,3);
//     InsertBack(&L2,1);
//
//     printf("\n第二种↓\n");
//
//     printf("原式:");Print(&L2);
//     DeleteRepeatElem2(&L2);
//     printf("之后:");Print(&L2);
//
//     Destroy(&L);
//     return 0;
// }